﻿using System;
namespace HXu.BaseTools
{
    /// <summary>
    /// StringTools 字符串工具 <br />
    /// /*************************************************<br />
    /// -- 内容：<br />
    ///     1A.字符串 富文本 红色。<br />
    ///     1B.字符串 富文本 绿色。<br />
    ///     1C.字符串 富文本 黄色。<br />
    ///     1D.字符串 富文本 设置颜色。<br />
    ///     1E.字符串 富文本 加粗。<br />
    ///     1F.字符串 富文本 斜体。<br />
    ///     1G.字符串 富文本 字体大小。<br />
    /// <br />
    ///     2A、指示指定的字符串 是否 为空字符串 ("")。<br />
    ///     2B、指示指定的字符串是 null 还是空字符串 ("")。<br />
    ///     2C、指示指定的字符串是 null、空字符串 ("")还是仅由空白字符("  ")组成。<br />
    /// <br />
    ///     3A、判断输入是否满足正则规则。<br />
    /// <br />
    ///     4A、char[]字符数组 转 string字符串。<br />
    ///     4B、string字符串 转 char[]字符数组。<br />
    /// <br />    
    /// -- 使用方法：<br />
    ///     1、引用命名空间，直接调用。<br />
    /// *************************************************/<br />
    /// </summary>
    public static class StringTools
    {
        /// <summary>
        /// 1A.字符串 富文本 红色
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string StringToRed(this object message) => $"<color={UnityEngine.Color.red.ColorToHex()}>{message}</color>";

        /// <summary>
        /// 1B.字符串 富文本 绿色
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string StringToGreen(this object message) => $"<color={UnityEngine.Color.green.ColorToHex()}>{message}</color>";

        /// <summary>
        /// 1C.字符串 富文本 黄色
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string StringToYellow(this object message) => $"<color={UnityEngine.Color.yellow.ColorToHex()}>{message}</color>";

        /// <summary>
        /// 1D.字符串 富文本 设置颜色
        /// </summary>
        /// <param name="message"></param>
        /// <param name="color"></param>
        /// <returns></returns>
        public static string StringToSetColor(this object message, UnityEngine.Color color) => $"<color={color.ColorToHex()}>{message}</color>";

        /// <summary>
        /// 1D.字符串 富文本 设置颜色
        /// </summary>
        /// <param name="message"></param>
        /// <param name="color">16进制颜色代码</param>
        /// <returns></returns>
        public static string StringToSetColor(this object message, string color)
        {
            if (!color.RegularMatch(ColorTools.hexColorRegex))
                throw new Exception($"color ({color}) isn't match regular");

            return $"<color={color}>{message}</color>";
        }

        /// <summary>
        /// 1E.字符串 富文本 加粗
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string StringToBold(this object message) => $"<b>{message}</b>";

        /// <summary>
        /// 1F.字符串 富文本 斜体
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static string StringToItalics(this object message) => $"<l>{message}</l>";

        /// <summary>
        /// 1G.字符串 富文本 字体大小
        /// </summary>
        /// <param name="message"></param>
        /// <param name="size">字体大小</param>
        /// <returns></returns>
        public static string StringToSetSize(this object message, int size) => $"<size={size}>{message}</size>";

        /// <summary>
        /// 2A、指示指定的字符串 是否 为空字符串 ("")。
        /// </summary>
        /// <param name="str">指定的字符串</param>
        /// <returns></returns>
        public static bool IsEmpty(this string str) => str == string.Empty;

        /// <summary>
        /// 2B、指示指定的字符串 是否 是null 还是空字符串 ("")。
        /// </summary>
        /// <param name="str">指定的字符串</param>
        /// <returns></returns>
        public static bool IsNullOrEmpty(this string str) => string.IsNullOrEmpty(str);

        /// <summary>
        ///  2C、指示指定的字符串 是否 是null、是空字符串 ("")还是仅由空白字符(" ")组成。
        /// </summary>
        /// <param name="str">指定的字符串</param>
        /// <returns></returns>
        public static bool IsNullOrWhiteSpace(this string str) => string.IsNullOrWhiteSpace(str);

        /// <summary>
        /// 3A、判断输入是否满足正则规则。
        /// </summary>
        /// <param name="input">输入</param>
        /// <param name="pattern">正则规则</param>
        /// <returns>满足true/不满足false</returns>
        public static bool RegularMatch(this string input, string pattern) => System.Text.RegularExpressions.Regex.IsMatch(input, pattern);

        /// <summary>
        /// 4A、char[]字符数组 转 string字符串
        /// </summary>
        /// <param name="chars"></param>
        /// <returns></returns>
        public static string CharArrToString(this char[] chars) => new string(chars);

        /// <summary>
        /// 4B、string字符串 转 char[]字符数组
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static char[] StringToCharArr(this string str) => str.ToCharArray();
    }
}